home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Original Shareware 1.1
/
The Original Shareware (WeMake CDs)(Volume 1.1)(CDs, Inc)(1993).iso
/
19
/
madtrb11.zip
/
HEAPTEST.PAS
< prev
next >
Wrap
Pascal/Delphi Source File
|
1985-07-13
|
2KB
|
60 lines
program HeapTest(input, output);
{
Source: "HEAPTEST for Turbo Pascal and FIX", TUG Lines Volume I, Issue 2
Author: Hal Varian
Application: Turbo Pascal version 2.0 for PC-DOS/MS-DOS
}
{This program demonstrates a bug in Turbo Pascal, version 2.
I put 10 integers on the stack, then release the stack and put
10 integers on the stack again. In v. 1.0 we get the same results
each time, as we should. In v. 2.0 we get different answers.
Apparently the procedure Release(HeapTop) is not working properly.}
{The procedure ReleaseHeap is a replacement for Release(HeapTop) and
seems to work correctly}
type
IntegerPointer = ^integer;
var
Number : ^integer;
HeapTop : ^integer;
Mem : real;
procedure ReleaseHeap (AHeapPointer : IntegerPointer);
var i : integer;
begin
i := ((seg(heapptr^) - seg(AHeapPointer^)) shl 4) +
(ofs(heapptr^) - ofs(AHeapPointer^));
FreeMem(AHeapPointer,i);
end;
procedure report; {report memory available}
begin
Mem := MemAvail;
if (Mem < 0) then Mem := 65536.0+MemAvail;
write('MemAvail = ',Mem:7:0, ' paragraphs ', Mem*16.0:9:0, ' bytes');
end;
procedure FillTheHeap(xc,yc,Depth : integer); {fill the heap to Depth}
var
n : integer;
begin
for n := 1 to Depth do
begin
New(Number) ;
Number^ := n;
gotoxy(xc,yc);
report;
end
end;
begin
Mark(HeapTop); {Mark the top of the heap}
gotoxy(5,20);
report; {1: Report memory available}
FilltheHeap(5,21,10); {2: Fill the heap with 10 integers}
ReleaseHeap(HeapTop); {Release the heap using the fix}
{Release(HeapTop); This does not work!}
gotoxy(5,22);
report; {3: Report memory available; should be same as in 1}
FilltheHeap(5,23,10); {4: Put 10 integers on again; should be same as in 2}
end.